package ynu.edu.merchant.service;

import org.springframework.data.domain.Page;
import ynu.edu.merchant.dto.MerchantReviewDTO;
import ynu.edu.merchant.vo.MerchantReviewVO;

import java.math.BigDecimal;

/**
 * 商家评价服务接口
 */
public interface MerchantReviewService {

    /**
     * 创建商家评价
     *
     * @param reviewDTO 评价信息
     * @return 评价信息
     */
    MerchantReviewVO createReview(MerchantReviewDTO reviewDTO);

    /**
     * 更新商家评价
     *
     * @param reviewDTO 评价信息
     * @return 评价信息
     */
    MerchantReviewVO updateReview(MerchantReviewDTO reviewDTO);

    /**
     * 获取商家评价信息
     *
     * @param id 评价ID
     * @return 评价信息
     */
    MerchantReviewVO getReviewById(Long id);

    /**
     * 删除商家评价
     *
     * @param id 评价ID
     * @return 是否成功
     */
    boolean deleteReview(Long id);

    /**
     * 根据商家ID查询评价列表
     *
     * @param merchantId 商家ID
     * @param page       页码
     * @param size       每页大小
     * @return 评价列表
     */
    Page<MerchantReviewVO> getReviewsByMerchantId(Long merchantId, int page, int size);

    /**
     * 根据用户ID查询评价列表
     *
     * @param userId 用户ID
     * @param page   页码
     * @param size   每页大小
     * @return 评价列表
     */
    Page<MerchantReviewVO> getReviewsByUserId(Long userId, int page, int size);

    /**
     * 商家回复评价
     *
     * @param id    评价ID
     * @param reply 回复内容
     * @return 是否成功
     */
    boolean replyReview(Long id, String reply);

    /**
     * 更新评价状态
     *
     * @param id     评价ID
     * @param status 状态：0-待审核，1-已通过，2-已拒绝
     * @return 是否成功
     */
    boolean updateReviewStatus(Long id, Integer status);

    /**
     * 计算商家的平均评分
     *
     * @param merchantId 商家ID
     * @return 平均评分
     */
    BigDecimal calculateAverageRating(Long merchantId);

    /**
     * 统计商家的评价数量
     *
     * @param merchantId 商家ID
     * @return 评价数量
     */
    long countReviewsByMerchantId(Long merchantId);
} 